%%�����㷨 
clc,clear;
load  Q2.mat;
% Chic_data = xlsread('chucunshuju_1.xlsx','A1:B49');  %49������
Chic_data = Q2{1,2} ;  % ��ȡ��һ�����ݣ�����
N = size(Chic_data , 1);  %����ά��
M = 100; % ��Ⱥ����
MM = 70; % ����������
L1 = [];
L2 = [];
shuju=cell(MM,3);
%% ����ʽ�㷨���ɳ�ʼ��Ⱥ
%for i = 1 : M
% y=[32 29 15 6 31 66 7 30 63 49 11 65 14]
 %n=numel(y)
 %x=randperm(n)
 %y= y(x)
 
 %f=[10 43 41 64 12 40 45 48 16 44 46 27 33 9 28 34 4 17 50]
 %c=numel(f)
 %F=randperm(c)
 %f= f(F)
 
 %p=[20	61	67	62	68	38	51	54	5	1	24	19	39	35	18	21	26	3	2	13	25	58	53	8	23]
 %k=numel(p)
 %j=randperm(k)
 %p=p(j)
 
% t=[52	55	60	37	36	47	59	42	57	22	56]
 %b=numel(t)
 %l=randperm(b)
 %t=t(l)
%PartSeqence=[y f p t]
 %H(i , :) = PartSeqence;  %��i����Ⱥ
  %  for j = 1 : N
   %     PS(j , :) = Chic_data(PartSeqence(j) , :);  
    %end
   % DY_data = PS;  %��i����Ⱥ��Ӧ���������
    %[ P_fit , PLOT{i , 1} ,PartS{i ,1} ] = dingwei(PartSeqence ,DY_data);  %��i����Ⱥ����Ӧ�ȣ������ʣ���  ���ݶ�λ�㷨
    %H_fit(i , :) = P_fit;  %��ʼ����Ⱥ����Ӧ��
    %chushizhongqun(i,:)=[H(i , :),H_fit(i , :)]
     %   A=sortrows(chushizhongqun,69)
      %H_fit=sortrows(H_fit)
 %end
%PartSeqence=A(1:50,1:68)
%H_fit=H_fit(1:50 ,:)
%H=PartSeqence
%HH_fit = max(H_fit);  %��ʼ����Ⱥ ��Ӧ�� �����Ӧ��
%a = find(H_fit == HH_fit); %�����Ӧ�ȶ�Ӧ ��λ��
%b = a(1 , 1);   %�����Ӧ�ȶ�Ӧ ��λ��
%PartS_1 = PartS{b ,1};  % ͷ���ҵ�����ȡ����Ӧ������ͼ���С�
%wolf(1 , :) = H(b , :); %ͷ��
%PLOT_1 = PLOT{ b,1 }; % ͷ�Ƕ�Ӧ���Ļ�ͼ����.
%H(b,:) = [];
%wolf_1 = H; %������
%% ���ɳ�ʼ��Ⱥ
for i = 1 : M
    PartSeqence=randperm(N);
    H(i , :) = PartSeqence;  %��i����Ⱥ
    for j = 1 : N
        PS(j , :) = Chic_data(PartSeqence(j) , :);  
    end
    DY_data = PS;  %��i����Ⱥ��Ӧ���������
    [ P_fit , PLOT{i , 1} ,PartS{i ,1} ] = dingwei(PartSeqence ,DY_data);  %��i����Ⱥ����Ӧ�ȣ������ʣ���  ���ݶ�λ�㷨
      H_fit(i , :) = P_fit;  %��ʼ����Ⱥ����Ӧ��
 end
HH_fit = max(H_fit);  %��ʼ����Ⱥ ��Ӧ�� �����Ӧ��
a = find(H_fit == HH_fit); %�����Ӧ�ȶ�Ӧ ��λ��
b = a(1 , 1);   %�����Ӧ�ȶ�Ӧ ��λ��
PartS_1 = PartS{b ,1};  % ͷ���ҵ�����ȡ����Ӧ������ͼ���С�
wolf(1 , :) = H(b , :); %ͷ��
PLOT_1 = PLOT{ b,1 }; % ͷ�Ƕ�Ӧ���Ļ�ͼ����.
H(b,:) = [];
wolf_1 = H; %������

for i5 = 1 : MM
    %% ����
    wolf_2 = [];
    for i1 = 1 : size(wolf_1 , 1)
        c = randi([1 N-4]);  %������߱������� �����λ�á�
        d = 5;  % �趨�������еĳ���
        c1 = c + d - 1
        if c > (1 + N -4)/2
            wolf_2( i1 , :) = [wolf_1(i1 , c : c1) , wolf_1(i1 ,  1:(c-1)) , wolf_1(i1 , (c1+1) : N) ];
        else
            wolf_2( i1 , :) = [wolf_1(i1 ,  1:(c-1)) , wolf_1(i1 , (c1+1) : N) , wolf_1(i1 , c : c1)];
        end
        % wolf_2( i1 , :) = [wolf_1(i1 ,  1:(c-1)) , wolf_1(i1 , (c1+1) : N) , wolf_1(i1 , c : c1)]; %���ߺ�       
        PartSeqence = wolf_2( i1 , :);
        for j = 1 : N
            PS_1(j , :) = Chic_data(PartSeqence(j) , :);%������֮��������ж�Ӧ������ߴ磩
        end  
        DY_data = PS_1;  % ������ж�Ӧ�� �������
        [ Y_fit(i1 , :) ] = dingwei(PartSeqence , DY_data);  %���ߺ������ʣ���Ӧ��ֵ��
    end
    wolf_2 = [wolf_2 ; wolf];  %����ͷ�ǵ� ��Ⱥ
    Y_fit = [Y_fit ; HH_fit ];  %����ͷ�ǵ���Ⱥ ����Ӧ��
    wolf = [];
    
    HH_fit = max(Y_fit);  %���ߺ���Ⱥ ��Ӧ�� �����Ӧ��ͷ�� ��Ӧ����Ӧ��ֵ
    a = find(Y_fit == HH_fit );
    b = a(1 , 1);
    wolf(1 , :) = wolf_2(b , :);  %ͷ��  ����ͷ��
    wolf_2(b,:) = [];
    wolf_1 = wolf_2;  %������
    Y_fit(b,:) = [];   %�����Ƕ�Ӧ����Ӧ��ֵ
    %% ��Ϯ��
    for i3 = 1 : size(wolf_1 , 1)
        G = wolf_1(i3 , :);
        %�ж� ���� �� ͷ��֮�䲻ͬ����λ����Ӧ��λ�ã�
        for i7 = 1 : size(G ,2)
            if G(1, i7) ~= wolf(1 , i7)
                L1 =[L1 ,i7];%������
                L2 = [L2 , wolf(1 , i7) ];
                s1 = 3; % ѡ��s1������λ
            end
        end
        for i4 = 1 : s1   
            e1 = L1 (1 , i4); % G ��Ҫ ���ĵ�λ��e1
            e2 = L2 (1 , e1); %��L2��λ��e1����e2��ȡ��׼������wolf_1��
            e3 = find( G == e2); %�ҵ�G��e2��Ӧ��λ�� e3
            e4 = G(1 , e1); %ȷ��wolf_1��λ��e3��Ӧ���õ���e4
            %����e2 e4
            G(1 ,e3) = e4;
            G(1 ,e1) = e2;
        end
        PartSeqence = wolf_1( i3 , :);
        for j = 1 : N
            PS_2(j , :) = Chic_data(PartSeqence(j) , :);
        end
        DY_data = PS_2;  % ������� ��Ӧ�� �������
        [Z_fit(i3 , :) , PLOT{i3 ,1} , PartS{i3 ,1} ] = dingwei(PartSeqence , DY_data); %��i���������ǣ�Χ�������Ӧ�� ��Ӧ������ wolf_1
        %  ԭ����ͷ�� wolf ��Ӧ������Ӧ��ֵ HH_fit
    end
    
    wolf_2 = [wolf_1 ; wolf];  %����ͷ�ǵ� ��Ⱥ
    Z_fit = [Z_fit ; HH_fit ];  %����ͷ�ǵ���Ⱥ����Ӧ��
    wolf = [];
    
    HH_fit = max(Z_fit);  %Χ������Ⱥ ��Ӧ�� �����Ӧ��
    a = find(Z_fit == HH_fit );   %�����Ӧ��ֵ ��Ӧ�� ��i���������
    b = a(1 , 1);
    wolf(1 , :) = wolf_2(b , :);  %ͷ��  ����ͷ��
    wolf_2(b,:) = [];
    wolf_1 = wolf_2;  %������
    Z_fit(b,:) = [];
    
    PartSeqence = wolf;
     
    for j = 1 : N
        PS_3(j , :) = Chic_data(PartSeqence(j) , :);
    end
    DY_data = PS_3;  % ������� ��Ӧ�� �������
    
    [ fit,PLOT_1 , PartS_1 ] = dingwei(PartSeqence , DY_data); 
            FIT(i5 , 1) = HH_fit;
            cost=700-FIT*700;
             shuju{i5, 1}=HH_fit;
              shuju{i5 ,2}=PLOT_1;
              shuju{i5 ,3}=PartS_1;
end


% ��ͼ
  % s = 0; % ��ʼ������
for i6 = 1 : size(PLOT_1 ,1)   %%����Ҫ���¸��»���
    F = PLOT_1{i6,1};
    if F(1,1) == 0 && F(1,2) == 0  %�ж��Ƿ���»���
        
      % s = s +1;
        
      figure %figure(s); %���»���
        axis square   %(�����꣬������ÿ���̶ȷ�Χ��һ��)
        set(gca,'xLim',[0,1200])%set(gca,'xLim',[0,2000]); %�����������
        set(gca,'yLim',[0,2000]); %  set(gca,'yLim',[0,10000])     
%         set(gca,'xlim',[0,2440]); %�����������
%         set(gca,'ylim',[0,1220]);        
        rectangle('Position',F,"LineWidth",1);%�����м�ǵľ���
       % title('����ͼ');
    else
        rectangle('Position',F,"LineWidth",1);
    end
    if F(1,4)~=0
    text(F(1,1)+F(1,3)/2,F(1,2)+F(1,4)/2,num2str(PartS_1(1 , i6)),"FontName","Times New Roman","FontSize",13,"LineWidth",20); % ���������
    end
end